﻿#include "DebounceFilter.h"
/**​
 * 构造函数
 * @param initial_value 初始有效值
 * @param debounce_threshold 消抖判定阈值（建议3 - 10）
 */
DebounceFilter::DebounceFilter(int initial_value, int debounce_threshold)
    : filtered_value(initial_value)
    , last_sample(initial_value)
    , debounce_count(0)
    , threshold(debounce_threshold)
{
}

/**​ 
 * 更新滤波值
 * @param new_sample 新采集的原始值
 * @return 滤波后的稳定值
 */
int DebounceFilter::update(int new_sample)
{
    if (new_sample == last_sample) {
        // 信号稳定，重置计数器
        debounce_count = 0;
    } else {
        // 信号变化，递增计数器
        if (++debounce_count >= threshold) {
            // 达到消抖阈值，更新有效值
            filtered_value = new_sample;
            last_sample = new_sample;
            debounce_count = 0;
        }
    }
    return filtered_value;
}

// 使用示例：
// DebounceFilter filter(0, 5);  // 初始化滤波器，初始值0，阈值5
// int sensor_value = read_sensor();
// int stable_value = filter.update(sensor_value);  // 获取稳定值
